package com.hyw.trace.configuration.sample.annotation;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import com.hyw.trace.configuration.meta.TraceSampler;

/**
 * 定义收集事件的注解,一般有以下属于:<br>
 * 事件分组 <br>
 * 事件类型 <br>
 * 事件描述 <br>
 * 触发时机(一般是方法前或者方法后) <br>
 * 信息如何采集,一般由具体业务的采集器完成 <br>
 * 信息采集是否异步
 * 
 * @author hongyu
 */
@Retention(RUNTIME)
@Target(METHOD)
public @interface TraceSource {
  /**
   * 事件类型的所属分组
   */
  String group() default "DEFAULT_GROUP";

  /**
   * 事件类型
   */
  String type() default "DEFAULT_TYPE";

  /**
   * 针对事件的描述,默认为Empty
   */
  String description() default "";

  /**
   * 此为采样比，取值范围为[0,100]. <br>
   * 默认值为100，即全量采样。 <br>
   * 为0时，则意味着，不采样。
   * <p>
   * 比如，假设采样比为90，则意味着在0-100区间取随机数，当小于等于90时，才会触发采样动作
   */
  int ratio() default 100;

  /**
   * 拦截的方法位置, 默认为前置拦截
   */
  JointPointType jointPoint() default JointPointType.Before;

  /**
   * 该次采集是否异步, 默认全是异步
   */
  boolean async() default true;

  /**
   * 由业务提供方自行注入
   */
  @SuppressWarnings("rawtypes")
  Class<? extends TraceSampler> sampler();

}
